import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class UdpEchoServer {
	private DatagramSocket socket=null;
	public UdpEchoServer(int port) throws SocketException {
		socket=new DatagramSocket(port);
	}
	public void start() throws IOException {
		System.out.println("服务器启动！");
		while(true) {
			//先创建一个数组用来存放二进制文件
			DatagramPacket  requestPacket=new DatagramPacket(new byte[4096],4096);
			//1.接受数据
			//如果没有客户端，就阻塞等待
			socket.receive(requestPacket);
			//2.requestPackage这是一个二进制文件
			//进行解析这个文件还要将二进制文件转换成一个字符串
			String request=new String(requestPacket.getData(),0, requestPacket.getLength());
			//3.拿到这个字符串，然后计算响应
			//因为我们这里是，回显服务器直接返回就行了
			String response=process(request);
			//4.计算完响应之后，之后再进行打包，发送给，客户端
			//UDP是无连接的，在打包的时候，仍要传送一个地址
			DatagramPacket responsePacket=new DatagramPacket(response.getBytes(),response.getBytes().length,
					requestPacket.getSocketAddress());
			//5.将数据包打包好，再发送给客户端
			socket.send(responsePacket);
			System.out.printf("[%s:%d] req=%s, resp=%s\n", requestPacket.getAddress().toString(),
					requestPacket.getPort(), request, response);
		}
	}
	public String process(String request) {
		return request;
	}

	public static void main(String[] args) throws IOException {
		UdpEchoServer server=new UdpEchoServer(9090);
		server.start();
	}
}
